<!--
   В этом примере:
   
      по нажатию кнопки "Загрузить файл" предлагается загрузить файл
      из файловой системы, после чего его содержимое отображается
      в поле textarea;
      
      по нажатию кнопки "Скачать файл" формируется файл с содержимым
      поля textarea, после чего этот файл отдается на скачивание
-->

<!DOCTYPE html>
<html>
<head>
   <meta charset="utf-8">
   <style>
      button, textarea {display: block; margin: 10px auto;}
      textarea {width: 80%; height: 10em;}
   </style>
</head>
<body>

<button type="button" id="fileGet">Загрузить файл</button>
<textarea></textarea>
<button type="button" id="filePut">Скачать файл</button>

<script src="fileio.js"></script>
<script>
   const dec = new TextDecoder(),
      taElem = document.querySelector("textarea");

   // Модифицируем кнопку "Загрузить файл", указывая ее ID,
   // функцию, которая будет выполняться при нажатии кнопки
   // (аргумент функции - содержимое загруженного файла как Unit8array)
   // и (не обязательно) допустимые типы файлов
   io.get(
      "fileGet",
      fileContent => taElem.value = dec.decode(fileContent)
      // , ".docx"
   );

   // Модифицируем кнопку "Скачать файл", указывая ее ID,
   // функцию, которая будет выполняться при нажатии кнопки
   // и возвращать содержимое отдаваемого файла, а также
   // MIME-тип отдаваемого файла и его имя
   io.put(
      "filePut",
      () => taElem.value,
      "text/plain",
      "myFile.txt"
   );
</script>
</body>
</html>
